//
//  main.m
//  循环retain
//
//  Created by wenjim on 17/10/6.
//  Copyright © 2017年 WenJim. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "Person.h"
#import "Dog.h"


int main(int argc, const char * argv[]) {
   
    Person * p = [[Person alloc] init];
    Dog * d = [[Dog alloc] init];
    
    // 如果A对象要拥有B对象，而B对象又要拥有A对象，此时会形成循环retain
    // 如何解决这个问题：不要让A retain B，B retain A
    // 让其中一方不要做 retain 操作即可
    p.dog = d; // retain
    d.owner = p;// retain assign
    
    [d release];
    [p release];
    
    return 0;
}
